# 实战篇 07:多语言支持
本节参考代码:

随着国内市场的逐渐饱和越来越多的中国公司开始将目光投向了国际市场,其中竞争最为激烈的莫过于东南亚。拥有 6.5 亿人口的东南亚,整个地区的 GDP 总和高达 2.6 万亿美元,作为一个互联网行业刚刚进入快速发展阶段的市场其未来的想象空间十分巨大。但与此同时,在这块面积并不算庞大的土地上却分布着大大小小 11 个国家,说着印尼语、马来语、英语、泰语、越南语、中文等几十种不同的语言。
互联网作为一个规模效应非常明显的行业天然就带有扩张的属性,但许多中国公司在出海后面临的第一个挑战就是产品不支持多种语言无法直接进入相应国家的市场。又因为现有系统在架构初期并没有将多语言支持的需求考虑进去,所以临时增加这个功能就变成了一件牵一发而动全身的事情,最后往往无功而返只得重新再做一个新的国际版,也就在这样来来回回的反复中白白浪费掉了许多宝贵的竞争机会。在吃过了这样的亏后,许多公司现在在开始一个新项目时就非常重视产品国际化的需求,希望能在架构初期就打下坚实的基础以至于在需要时可以轻松地产出多个不同语言的版本。
# 语言文件
语言文件,顾名思义就是一套对应不同语言翻译的键值对匹配。如果我们要把多语言支持的工作放在前端来做的话,最简单的一个方法就是以 JSON 的格式存储这些语言文件以方便应用在运行时读取相应的翻译值。
locale.json
{
"en-us": {
"appName": "React App Pro",
"siderMenu_dashboard": "Dashboard",
"siderMenu_analysis": "Analysis",
...
},
"zh-cn": {
"appName": "React 中后台应用",
"siderMenu_dashboard": "仪表盘",
"siderMenu_analysis": "分析页",
...
}
}
在存储方面对于追求开发效率的团队来说,将语言文件直接 commit 到项目的代码仓库是一种可行的做法。但如果有条件的话还是应该将下载语言文件这一步放在项目持续集成的流程中,每一次构建项目时从存放语言文件的远端服务器拉取最新的版本,以保证发布到生产环境中的语言文件永远是最新的。
# 多语言版本切换 vs. 多语言版本构建

在讨论具体的产品国际化方案前,首先要明确的一点是,多语言支持这样一个需求根据具体的产品形态可以有两种不同的解决方案。
一是多语言版本切换,也就是在同一个应用中支持用户切换产品的不同语言版本。
二是多语言版本构建,即将同一个应用打包成不同语言的版本,分别发布到不同的生产环境中,但在应用内部不支持多语言切换。
对于多语言版本切换来说,因为在运行时可能会用到
